#ifndef GAMECONTEINER_H
#define GAMECONTEINER_H

#include <iostream>
#include <string>
#include "core/GameManager.h"

#include <iostream>

using namespace std;

namespace eats_core {

/**
 *  @brief Classe conteiner de um game. Possui o básico para ser referênciada pelas demais classes.
 * Iniciada apartir de um arquivo XML
 *
 * @autor Eusyar
 */
class GameConteiner
{

    private:

        /**
         * @brief Construtor privado.
         */
        GameConteiner();

        static GameConteiner * game ;

        GameManager * gameManager;


    public:


        virtual ~GameConteiner();
        static std::string fileLocation;

        /**
         * @brief Singleton publico. Garante a aquisição do mesmo gameconteiner para todo o game.
         */
        static GameConteiner * getInstance() {
            if (  game == NULL ) {
                game = new GameConteiner();
                if (game -> config(fileLocation) == false) {
                	std::cout << "|ERROR| Ao iniciar o game =["<< std::endl;
                }
            }
            return game;
        }

        /**
         * Metodo que configura o container apartir de um xml. Configura o gamemaneger e os states.
         *
         * @param file
         * @return falso caso não tenha iniciado o game corretamente
         */
        bool config(std::string  file );

        /**
         * @brief Metodo que inicia o gameManager
         */
         int start() {
        	 return gameManager -> execute();
         }

         /**
         * @brief Metodo que destroi o gameManager
         */
         void shutdown() {
        	cout << "|WARNING| INICIANDO O PROCESSO DE FINALIZAÇÃO DO GAME" << endl;
            gameManager -> tearDown();
         }

         GameManager * getGameManager()
         {
        	 return gameManager;
         }

    protected:


};


}
#endif // GAMECONTEINER_H
